from verify_email import verify_email

def email_verifier(email):
    # 使用verify_email函数验证电子邮件
    verify = verify_email(email)
    # 检查验证值是否为True
    if verify == True:
        print('EMAIL格式正确')
    # 检查验证值是否为False
    elif verify == False:
        print('EMAIL格式错误')

def idcard():
    factor = (7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2)
    last = ("1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2")
    while True:
        flag = True
        ident = input("请输入你的身份证号：")
        # 首先判断输入的是否为18位
        if len(ident) == 18:
            # 除去字符串中的空格
            identity = ident.replace(" ", "")
            if len(identity) == 18:
                identity_result = []
                # 判断前17位是否有非法字符
                for i in identity[0: 17: 1]:
                    try:
                        identity_result.append(int(i))
                    except:
                        flag = False

                # 使用lambda匿名函数定义乘法规则
                func = lambda x, y: x * y
                # map内置函数会根据提供的函数对指定的序列做映射,得到两个列表相乘的列表
                result_mult = list(map(func, identity_result, factor))

                # 将相乘的结果相加，用相加的结果与11求模
                result_add_yu = sum(result_mult) % 11

                # 根据身份证的第十八位和求得的余数对应的字符判断身份证号是否合法
                if identity[17] == last[result_add_yu] and flag == True:
                    print("身份证号输入合法。")
                    if identity_result[16] % 2 == 0:
                        print("性别为女性。")
                    else:
                        print("性别为男性。")
                    break
                else:
                    print("身份证号输入不合法！请重新输入!")
                    continue
            else:
                print("身份证号位数不合法！！请重新输入！")
                continue
        else:
            print("身份证号位数不合法！！！请重新输入！")
            continue

        
my_email = input('Enter email address:')
email_verifier(my_email)

idcard()
